/**
 * 小易来到了一条石板路前，每块石板上从1挨着编号为：1、2、3.......
 * 这条石板路要根据特殊的规则才能前进：对于小易当前所在的编号为K的 石板，小易单次只能往前跳K的一个约数(不含1和K)步，即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板，他想跳到编号恰好为M的石板去，小易想知道最少需要跳跃几次可以到达。
 * 例如：N = 4，M = 24：
 *      4->6->8->12->18->24
 * 于是小易最少需要跳跃5次，就可以从4号石板跳到24号石板
 * 输入描述： 输入为一行，有两个整数N，M，以空格隔开。 (4 ≤ N ≤ 100000) (N ≤ M ≤ 100000)
 * 输出描述：输出小易最少需要跳跃的步数,如果不能到达输出-1
 * 输入： 4 24
 * 输出： 5
 */
import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.nextLine();
            StringBuilder sb = new StringBuilder();
            ArrayList<String> list = new ArrayList<>();

            boolean flag = false;
            int length =  s.length();
            for(int i = 0; i < length; i++){
                char c = s.charAt(i);
                if(c=='"'){
                    //遇到第一个引号 flag为true,第二个引号 flag为false
                    flag = !flag;
                    continue;//继续遍历下一个字符
                }
                //如果c是空格 ,且flag为false时,即 没有引号 或已经是第二个引号结束
                if(c==' ' && !flag){
                    list.add(sb.toString());//往集合中添加当前拼接到的字符串
                    sb = new StringBuilder();//置空  重新遍历下一个字符
                }else{
                    //即 不是引号 也不是第二种逻辑
                    sb.append(c);
                }
            }
            //最后遍历结束 没有空格或引号,需要再加上sb 打印出数组的长度,即几个命令
            list.add(sb.toString());
            System.out.println(list.size());
            //打印出命令
            for(String s1 : list){
                System.out.println(s1);
            }
        }
    }
    // 题解的方式和我的不一样
}
